package com.api.config;
import com.api.utils.JsonUtil;
import org.springframework.util.StringUtils;
import java.io.Serializable;

/**
 * @ClassName: Result
 * @Description: 定义API接口返回结果
 * @author: QT
 * @date: 2020年10月09日 上午9:26:37
 */
public class Result<T> implements Serializable {
    private static final long serialVersionUID = -1586118647101027089L;

    /**
     * 状态标识
     * 只有三种：0-成功、1-失败（业务逻辑不允许）、2-失败（系统异常）
     * 后续若有业务状态码，另加属性
     */
    private int code;

    private String message;        //提示信息

    private Object object;        //返回数据

    /**
     * @return
     * @Description 请求成功 且 不需要返回其他数据
     */
    public static Result succResult() {
        return succResult(null);
    }

    /**
     * @param object 要返回的其他数据
     * @return
     * @Description 请求成功 且 需要返回其他对象数据
     */
    public static Result succResult(Object object) {
        return new Result(UIConst.CODE_SUCCESS, "success", object);
    }

    /**
     * @param message 要返回的其他数据
     * @return
     * @Description 请求成功 且 需要返回其他字符串提示信息
     */
    public static Result succResult(String message) {
        return new Result(UIConst.CODE_SUCCESS, "success", message);
    }

    /**
     * @param reason 失败的原因。如：参数不正常
     * @return
     * @Description 请求失败（业务逻辑不允许）
     */
    public static Result failResult(String reason) {
        return new Result(UIConst.CODE_FAILED, "fail", reason);
    }

    /**
     * @return
     * @Description 请求失败（系统异常）
     */
    public static Result errResult() {
        return new Result(UIConst.CODE_ERROR, UIConst.MSG_ERROR, null);
    }

    /**
     * @param cause 系统异常原因
     * @return
     * @Description 请求失败（系统异常 带 原因）
     */
    public static Result errResult(String cause) {
        return new Result(UIConst.CODE_ERROR, StringUtils.isEmpty(cause) ? UIConst.MSG_ERROR : cause, null);
    }


    public static Result setResult(int code, String message) {
        return new Result(code, message, null);
    }

    public Result() {
        super();
    }

    public Result(int code, String message, Object object) {
        this.code = code;
        this.message = message;
        this.object = object;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getObject() {
        return object;
    }

    public void setObject(Object object) {
        this.object = object;
    }

    public String toJson() {
        return JsonUtil.object2Json(this);
    }

}

